/**
 * 时间转换
 * @params {String | Number} 时间字符串或者时间戳
 */
const formatTime = (time: string | number | Date) => {
	// 拿到当前的时间戳（毫秒) -- 转换为秒
	let currentTime = new Date();
	let currentTimestamp = parseInt((currentTime.getTime() / 1000).toString());

	// 传进来的时间戳（毫秒）
	let t = new Date(time);
	let oldTimestamp = parseInt((t.getTime() / 1000).toString());

	// 年
	let oldY = t.getFullYear();
	// 月
	let oldM = t.getMonth() + 1;
	// 日
	let oldD = t.getDate();
	// 时
	let oldH = t.getHours();
	// 分
	let oldi = t.getMinutes();
	// 秒
	let olds = t.getSeconds();

	// 相隔多少秒
	let timestampDiff = currentTimestamp - oldTimestamp;

	if (timestampDiff < 60) {
		// 一分钟以内
		return "刚刚";
	}

	if (timestampDiff < 60 * 60) {
		// 一小时以内
		return Math.floor(timestampDiff / 60) + " 分钟前";
	}

	// 今天的时间
	if (oldY === currentTime.getFullYear() && oldM === currentTime.getMonth() + 1 && oldD === currentTime.getDate()) {
		return `今天 ${zeroize(oldH)}:${zeroize(oldi)}`;
	}
	//昨天的时间（如果是每个月1号和上个月最后一号则显示全部时间，不显示昨天）
	if (oldY === currentTime.getFullYear() && oldM === currentTime.getMonth() + 1 && oldD === currentTime.getDate() - 1) {
		return `昨天 ${zeroize(oldH)}:${zeroize(oldi)}`;
	}
	//前天的时间（如果是每个月1号和上个月最后2号则显示全部时间，不显示前天）
	if (oldY === currentTime.getFullYear() && oldM === currentTime.getMonth() + 1 && oldD === currentTime.getDate() - 2) {
		return `前天 ${zeroize(oldH)}:${zeroize(oldi)}`;
	}
	// 剩下的，就是前天及以前的数据
	return `${oldY}-${zeroize(oldM)}-${zeroize(oldD)} ${zeroize(oldH)}:${zeroize(oldi)}`;

	// 补0
	function zeroize(num: string | number) {
		return num < 10 ? "0" + num : num;
	}
};

export default formatTime;
